package com.tianjin.design.singleton;

public class Teacher {


	private Teacher() {}

	public static Teacher teacher;

	/**
	 *
	 * @return
	 * 2023年4月6日
	 * chaiz tianjin
	 * TODO 懒汉式创建，声明时不创建实例，等到用的时候再创建，但是在多线程环境下，可能会导致创建多个实例，为线程不安全
	 */
	public static Teacher newInstance1() {

		if (teacher == null) {
			teacher = new Teacher();
		}

		return teacher;

	}

	/**
	 *
	 * @return
	 * 2023年4月6日
	 * chaiz tianjin
	 * TODO 懒汉式创建，声明时不创建实例，等到用的时候再创建，但是在多线程环境下，可能会导致创建多个实例，为保证线程安全，直接加同步锁 synchronized
	 */
	public static synchronized Teacher newInstance2() {

		if (teacher == null) {
			teacher = new Teacher();
		}

		return teacher;

	}


//	public static Teacher teacher = new Teacher();

	/**
	 *
	 * @return
	 * 2023年4月6日
	 * chaiz tianjin
	 * TODO 饿汉式创建，声明对象时直接创建唯一实例.类加载时直接初始化，浪费内存，但效率高，线程安全
	 */
	public static Teacher newInstance3() {

		return teacher;

	}

	/**
	 *
	 * @return
	 * 2023年4月6日
	 * chaiz tianjin
	 * TODO 双重校验锁。延迟加载且线程安全，只是实现复杂
	 */
	public static Teacher newInstance4() {

		if (teacher == null) {

			synchronized (Teacher.class) {

				if (teacher == null) {
					teacher = new Teacher();
				}

			}

		}

		return teacher;

	}

}
